const App = getApp()
const db = wx.cloud.database()
const _ = db.command
let that
// 系统消息方法
const remind = require('../../../common/remind/remind.js')

Page({

  /**
   * 页面的初始数据
   */
  data: {
    active: 0,
    courseId: "",
    courselist: "",
    // 设置弹窗
    settingShow: false,
    // 班级绑定弹窗
    show: false,
    // 课程详情弹窗
    courseDetailsshow: false,
    // 课程时间弹窗
    courseShow: false,
    // 选择上课方式
    pickerIdx: null,
    picker: ['线上教学', '线下教学'],
    // 选择时间弹窗
    TimeShow: false,
    // 时间选择cell组件箭头方向
    // 默认向右
    addcell: "",
    endcell: "",
    // 用来判断选择的是开始时间还是结束时间
    chooseTimeKey: "",
    // 初始时间
    TimeValue: "",
    // 展示时间
    addTime: "",
    endTime: "",
    // 选择好的时间
    courseTime: {
      addTime: 0,
      endTime: 0,
    },
    // 新增课程时间的教学方式和地点
    ClassMode: {
      mode: "",
      location: ""
    },
    // 智能提醒开关
    remind: true,
    // 班级绑定单选框
    radio: '',
    //  班级
    class: {
      name: "",
        classid: null,
        member: []
    },
    // 更改课程信息
    setCourse: {
      courseName: ""
    },
    // 我的班级
    myclass: [],
    // 尚未上课的时间
    courseTimes: [],
    // 正在上课中的课程
    occursCourse: [],
    // 已经过期的课程
    pastcourse: [],
    // 日志
    loglist: [],
    // 课程详情对象
    coursetime: "",
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    that = this
    let UserInfo = App.cache.getUserInfo()
    console.log('获取用户信息:', UserInfo);
    delete UserInfo._id
    let courseId = JSON.parse(decodeURIComponent(options.passData));
    console.log('拿到传值回来的课程id:', courseId);
    that.setData({
      courseId: courseId,
      UserInfo: UserInfo,
    })
    this.getcourse()
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {},

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  },
  // tabs选择
  onChangeTabs(event) {
    console.log('tabs', event.detail.title);
    switch (event.detail.title) {
      case '日志':
        that.getAttendanceHis()
        break;
      case '公告':
        console.log("这是3");
        break;
      case '线上学习':
        console.log("这是3");
        break;
      default:
        console.log("都没有");
        break;
    }
  },
  // 班级设置输入框
  handleChange(e) {
    console.log(e.detail.value);
    const {
      detail,
      currentTarget
    } = e
    console.log('currentTarget.id', currentTarget.id);
    console.log('detail.value', detail.value);
    this.setData({
      [`${currentTarget.id}`]: detail.value
    })
  },
  // 打开设置弹窗
  settingShowPopup(e) {
    let Creator = e.currentTarget.dataset.creator
    console.log(Creator);
    if (Creator != that.data.UserInfo.account) {
      App.toast.showToast('你没有权限更改课程详情')
      return
    }
    this.setData({
      settingShow: true
    });

  },
  // 关闭设置弹窗
  onCloseSettingPopup() {
    this.setData({
      settingShow: false,
      ['setCourse.courseName']: ""
    });
  },
  // 打开班级绑定弹窗
  showPopup() {
    wx.hideKeyboard()
    this.setData({
      show: true
    });

    this.getMyclass()
  },
  // 关闭班级绑定弹窗
  onClosePopup() {
    this.setData({
      show: false,
      radio: ''
    });
  },

  // 打开课程时间安排弹窗
  courseTimePopup(e) {
    if (that.data.courselist.class.classId == null) {
      App.toast.showToast('请先绑定班级', "error")
      return
    }
    let account = e.currentTarget.dataset.account
    if (account == that.data.UserInfo.account) {
      this.setData({
        courseShow: true,
      });
    } else {
      App.toast.showToast('只有老师才能添加课程安排')
    }
  },
  // 关闭课程时间安排弹窗
  onClosecoursePopup() {
    this.setData({
      courseShow: false,
      addTime: "",
      endTime: "",
      remind: false,
      pickerIdx: null,
      ['courseTime.addTime']: "",
      ['courseTime.endTime']: "",
    });
  },
  // 选择教学方式
  bindPickerChange: function (e) {
    console.log('picker发送选择改变，携带值为', e.detail.value)
    let picker = that.data.picker
    that.setData({
      pickerIdx: e.detail.value,
      'ClassMode.mode': picker[e.detail.value]
    })
  },
  // 打开选择时间弹窗
  chooseTimePopup(event) {
    // 先更新目前时间
    console.log(App.Time.TimeCode());
    that.setData({
      TimeValue: App.Time.TimeCode(),
    })
    const {
      key
    } = event.currentTarget.dataset
    console.log('key', key);
    if (key == 'add') {
      that.setData({
        addcell: "down",
        endcell: "",
        // 判断开始还是结束的值
        chooseTimeKey: key,
      });
    } else {
      that.setData({
        addcell: "",
        endcell: "down",
        // 判断开始还是结束的值
        chooseTimeKey: key,
      });
    }
  },
  // 选择时间
  TimehandleChange(e) {

    // 获取开始时间还是结束时间
    let key = e.currentTarget.dataset.key
    // 获取标准时间
    let Time = e.detail.dateString
    // 将时间转成时间戳
    let formatTime = new Date(Time).getTime()
    if (formatTime < (Date.now() - 60000)) {
      App.toast.showToast('选择时间不能低于当前时间')
      return false
    }
    if (key == 'add') {

      that.setData({
        addcell: "",
        // 判断开始还是结束的值
        chooseTimeKey: key,
        // 展示时间
        addTime: Time,
        // 创建课程安排需要的时间
        'courseTime.addTime': formatTime,
      });
    } else {
      // 结束时间不能低于开始时间
      if (formatTime <= that.data.courseTime.addTime) {
        App.toast.showToast('结束时间不能低于开始时间')
        return false
      }
      that.setData({
        endcell: "",
        // 判断开始还是结束的值
        chooseTimeKey: key,
        // 展示时间
        endTime: Time,
        // 创建课程安排需要的时间
        'courseTime.endTime': formatTime
      });
    }
    console.log('开始', that.data.courseTime.addTime);
    console.log('结束', that.data.courseTime.endTime);
  },


  // 点击查看课程安排详情
  courseDetails(e) {
    let state = e.currentTarget.dataset.state
    let coursetime = e.currentTarget.dataset.coursetime
    coursetime.state = state
    console.log('点击的课程详情', coursetime);
    this.setData({
      courseDetailsshow: true,
      courseDetail: coursetime
    });
  },
  // 关闭课程详情弹窗
  onCloseCourseDetails() {
    this.setData({
      courseDetailsshow: false
    });
  },
  // 是否启动智能邮件提醒
  remind(event) {
    that.setData({
      remind: event.detail.value
    })
    console.log(that.data.remind);
  },
  // 单选框
  onChangeradio(event) {
    this.setData({
      radio: event.detail,
    });
  },
  // 单选框
  onClickradio(event) {
    let data = event.currentTarget.dataset;
    console.log('当前选中的班级的id：', data.value);
    console.log('当前选中的班级的名称：', data.name);
    console.log('当前选中的班级的成员：', data.list);
    if (!data.value) {
      this.setData({
        radio: "",
        ['class.name']: "",
        ['class.classid']: null,
        ['class.member']: [],
        show: false
      });
    } else {
      this.setData({
        radio: data.value,
        ['class.name']: data.name,
        ['class.classid']: data.value,
        ['class.member']: data.list,
      });
    }
  },
  // 单选框 end
  // 获得我的班级
  getMyclass() {
    db.collection('myclass').where(_.and([{
          Administrator: that.data.UserInfo.account
        },
        {
          classType: _.eq('课程班级')
        }
      ]))
      .get({
        success: function (res) {
          console.log(res.data)
          that.setData({
            myclass: res.data,
            loading: false,
          })
        }
      })
  },
  // 绑定班级按钮
  bindingcourse(e) {
    let classlist = that.data.class
    console.log('绑定的班级详情', classlist);
    App.toast.showLoading('绑定中')
    let courseid = e.currentTarget.dataset.courseid
    db.collection('course').where({
        courseId: courseid
      })
      .update({
        data: {
          class: {
            name: classlist.name,
              classId: classlist.classid,
          },
          courseMember: classlist.member
        },
        success: function (res) {
          App.toast.hideLoading()
          console.log('绑定成功', res);
          that.onClosePopup()
          that.onCloseSettingPopup()
          that.getcourse()
          App.toast.showToast('绑定成功', "success")
        }
      })
    App.toast.hideLoading()
  },
  // 获取课程详情
  getcourse() {
    App.toast.showLoading('加载中')
    db.collection('course').where({
        courseId: that.data.courseId
      })
      .get({
        success: function (res) {
          let courselist = res.data[0]
          console.log('获取该课程', courselist)
          let Time = Date.now()
          let list = res.data[0].courseTime
          // 过滤掉已经过期的课程
          let courseTimes = list.filter(x => x.endTime > Time && x.addTime > Time);
          // 获取正在上课的课程
          let occursCourse = list.filter(x => x.addTime < Time && x.endTime > Time);
          // 获取已经下课的课程
          let pastcourse = list.filter(x => x.endTime < Time);
          that.setData({
            courselist: courselist,
            occursCourse: occursCourse.sort((x, y) => x.addTime - y.addTime),
            courseTimes: courseTimes.sort((x, y) => x.addTime - y.addTime),
            pastcourse: pastcourse.sort((x, y) => x.addTime - y.addTime)
          })
          App.toast.hideLoading()
        }
      })
    App.toast.hideLoading()

  },
  // 解绑班级
  unbundlingcourse(e) {
    App.toast.showLoading('解绑中')
    let courseid = e.currentTarget.dataset.courseid
    db.collection('course').where({
        courseId: courseid
      })
      .update({
        data: {
          class: {
            name: "",
              classId: null,
          },
          courseMember: []
        },
        success: function (res) {
          App.toast.hideLoading()
          that.onClosePopup()
          that.onCloseSettingPopup()
          that.getcourse()
          console.log('解绑成功', res);
          App.toast.showToast('解绑成功', "success")
        }
      })
  },

  // },
  // 获取考勤记录
  getAttendanceHis() {
    App.toast.showLoading('加载中')
    db.collection('attendance-record').where(_.and([{
        courseId: _.eq(that.data.courseId)
      }, ]))
      .orderBy('timeTs', 'desc').get({
        success: function (res) {
          console.log('考勤记录', res.data)
          let list = res.data
          App.toast.hideLoading()
          that.setData({
            loglist: list
          })
        }
      })
  },
  //校验新增课程安排的信息
  checkCourseTime() {
    // 获取课程的开始和结束时间
    let courseTimeList = that.data.courseTime
    console.log('courseTimeList', courseTimeList);
    // 增加课程时间key
    courseTimeList.Timekey = 'Ti' + (+new Date()).toString().substring(5, 13),
      // 获取绑定班级的名字
      courseTimeList.className = that.data.courselist.class.name
    // 获取课程名字
    courseTimeList.coursename = that.data.courselist.coursename
    // 获取课程id
    courseTimeList.courseId = that.data.courselist.courseId
    if (courseTimeList.addTime === 0 || courseTimeList.endTime === 0) {
      App.toast.showToast('时间需填写完整', "error")
      return false
    }
    // 判断结束时间是否比开始早
    if (courseTimeList.endTime - courseTimeList.addTime <= 0) {
      App.toast.showToast('结束时间不可以小于开始时间')
      return
    }
    // 获取教学方式,教学方式必须选择
    let ClassMode = that.data.ClassMode
    console.log('ClassMode', ClassMode);
    if (ClassMode.mode == "") {
      App.toast.showToast('教学方式必须选择')
      return
    }
    // 如果是线下教学那就检查教学地点有没有
    if (ClassMode.mode === '线下教学' && ClassMode.location == '') {
      App.toast.showToast('线下教学必须填写地点')
      return
    }
    // 把教学方式加到对象里
    courseTimeList.ClassMode = ClassMode.mode
    // 教学地点把加到对象里
    courseTimeList.location = ClassMode.location

    // 把是否启用提醒加入对象
    courseTimeList.remind = that.data.remind
    // 以下开始创建
    console.log('最终创建的对象', courseTimeList);
    that.addcourseTime(courseTimeList)
  },
  // 开始创建课程安排
  addcourseTime(courseTimeList) {
    console.log('开始创建课程安排', courseTimeList);
    App.toast.showLoading('加载中')
    db.collection('course').where({
        courseId: that.data.courseId
      }).update({
        data: {
          courseTime: _.push(courseTimeList)
        },
      })
      .then(res => {
        console.log(res)
        App.toast.hideLoading()
        // 将课程信息上传到消息中心,
        // 第一项 是消息类别，比如上课提醒、实践任务提醒、系统信息
        //  第二项 是接收信息的成员数组 
        //  第三项 是发布的提醒内容 （有默认项，可不填）
        remind.Message('CourseMsg', that.data.courselist.courseMember, '你参与的' + courseTimeList.className + '课程增加了一门课程安排，请进入我的课程查看')
        console.log('课程信息', courseTimeList);
        // 是否开启智能提醒
        console.log('remind', courseTimeList.remind);
        if (courseTimeList.remind === true) {
          console.log('开启智能提醒');
          // 传值给发送队列函数
          that.addcourseEmail(courseTimeList)
        }
      })
      .then(res => {
        console.log('3');
        App.toast.showToast('新增完成')
        // 重新更新课程详情
        that.getcourse()
        // 关闭课程安排弹窗
        that.onClosecoursePopup()
      })
  },



  // 将邮件方法上传发送队列
  addcourseEmail(e) {
    console.log('获取班级详情用来操作', e);
    let courselist = that.data.courselist
    db.collection('course-email').add({
        data: {
          addTime: e.addTime,
          Timekey: e.Timekey,
          coursename: courselist.coursename,
          courseId: courselist.courseId,
          courseMember: courselist.courseMember,
          TimeTS: Date.now(),
        }
      })
      .then(res => {
        console.log('我是2的返回值');
        console.log('创建成功', res);
      })
  },
  // 更新课程信息
  setCourse() {
    App.toast.showLoading('加载中')
    let setCourse = that.data.setCourse
    db.collection('course').where({
      courseId: that.data.courseId
    }).update({
      data: {
        coursename: setCourse.courseName,
        'courseTime.$[].coursename': setCourse.courseName
      },
      success: function (res) {
        console.log(res);
        // 同时更新讨论区和发送邮件的课程名字
        db.collection('chat-msg').where({
          courseId: that.data.courseId
        }).update({
          data: {
            coursename: setCourse.courseName
          }
        })
        db.collection('course-email').where({
          courseId: that.data.courseId
        }).update({
          data: {
            coursename: setCourse.courseName
          }
        })
        App.toast.hideLoading()
        App.toast.showToast('更新成功')
        // 重新更新课程详情
        that.getcourse()
        that.onCloseSettingPopup()
      }
    })
  },
  //  删除课程
  removeCourse() {
    wx.showModal({
      title: '提示',
      content: '确定结束该课程吗',
      success(res) {
        if (res.confirm) {
          let courseId = that.data.courseId
          db.collection('course').where({
            courseId: courseId
          }).remove({
            success: function (res) {
              console.log(res);
              // 同时删除课程社区
              let ChatCommunityId = 'chat' + courseId
              console.log('chatId', ChatCommunityId);
              db.collection('chat-msg').where({
                ChatCommunityId: ChatCommunityId
              }).remove({
                success: function (res) {
                  console.log('删除成功', res)
                  App.route.relBack('/pages/course/list/index')
                  App.toast.showToast('删除成功')
                }
              })
            }
          })
        } else if (res.cancel) {
          console.log('用户点击取消')
        }
      }
    })

  },

  // 问号请提示，解释为什么有立即发送邮件提醒成员
  remindtoast() {
    App.toast.showToast('此用于是否开启智能提醒，智能提醒会在每门课开始前三十分钟发送邮件提醒', "none", 3000)
  },


  // 成员路由
  memberRoute(e) {
    const courseId = e.currentTarget.dataset.courseid
    if (that.data.courselist.class.classId == null) {
      App.toast.showToast('请先绑定班级', "error")
      return
    }
    console.log(courseId);
    App.route.navTo('/pages/course/details/member/index', courseId)
  },
  // 讨论社区
  discussion(e) {
    if (that.data.courselist.class.classId == null) {
      App.toast.showToast('请先绑定班级', "error")
      return
    }
    let data = e.currentTarget.dataset
    console.log(data);
    data.chatId = 'chat' + that.data.courselist.class.classId
    data.chatName = data.courselist.class.name
    console.log('data.chatId', data.chatId);
    App.route.navTo('/pages/discussion/index', data)
  },
  // 考勤
  attendance(e) {
    if (that.data.courselist.class.classId == null) {
      App.toast.showToast('请先绑定班级', "error")
      return
    }
    let courseId = e.currentTarget.dataset.courseid
    App.route.navTo('/pages/course/attendance/index', courseId)
  },

  // 作业
  practice() {
    if (that.data.courselist.class.classId == null) {
      App.toast.showToast('请先绑定班级', "error")
      return
    }
    let lecturer = that.data.courselist.lecturer
    let UserInfo = that.data.UserInfo
    console.log(lecturer.account);
    if (lecturer.account === UserInfo.account && UserInfo.identityId === 'Teachers') {
      console.log('我是老师，并且是创始人');
      App.route.navTo('/pages/teachers/practice/list/index')
    } else {
      console.log('我是学生，并且是成员');
      App.route.navTo('/pages/students/practice/list/index')

    }
  }
})